﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Newtonsoft.Json.Linq;

/**
 * 
 * des：当前的页面主要的功能是利用jsapi实现免登
 * 
 * author:zhaohaonan
 * 
 * date:2015-12-11
 * 
 * */

namespace WebDingDemo
{
    public partial class SAPI : System.Web.UI.Page
    {
        public string access_tokens;
        public string codes;
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                string code = Request["code"];
                //根据CropId与cropSecret去换取AccessToken
                //这里的AccessToken的主要含义是企业令牌，它的意思是说依靠这个令牌可以去拿取与企业相关的数据，
                //根据官方文档介绍这里的有效期是7200秒，
                 var tokenModel = EnterpriseBusiness.GetToken(Config.ECorpId, Config.ECorpSecret);
               // string access_token = Helper.GetAccessToken();//tokenModel.access_token;
                this.access_token.Text = tokenModel.access_token;//Helper.GetAccessToken();//access_token;
                this.codess.Text = code;
                /*
                 * 这里拿到企业令牌后，可以将其保存到数据库中，同时设定它的过期时间为当前时间+7200秒，             
                 * 每次使有令牌时判断当前时间是否已经超过了有效期，如果超过了有效期，请重新获取新的令牌
                 * 为了安全access_token在实际的开发过程当中不建议放到客户端，这个令牌一般禁止用户接触到，一般可放在服务器端的session里             
                 */
                //  Helper.WriteLog("access_token:" + access_token);


                //---------------利用access_token和code去换取当前用户
                UserModel userModel = EnterpriseBusiness.GetCurrentUser(tokenModel.access_token, code);
                this.dingid.Text = userModel.userid;
                //  Helper.WriteLog("userId:" + userModel.userid);

                this.Tickets.Text = Helper.GetjsapiTicket(); //EnterpriseBusiness.GetTickets(access_token);
                //拿到access_token之后。可以参照钉钉开发文档中的-服务端开发文档进行其它api的测试。关于服务端的回调接口，将在isv的开发中提到具体的用法。
                //这里只写一个接口测试。
                // string url = "https://oapi.dingtalk.com/department/create?access_token=" + access_token;
                // string param = "{\"access_token\":\"" + access_token + "\",\"name\":\"新增部门测试\",\"parentid\":\"1\",\"order\":\"3\",\"createDeptGroup\":\"false\"}";
                // string callback = HttpHelper.Post(url, param);
                //  Helper.WriteLog("创建部门：" + callback);
                DingUser DDU = GetNameNoImgByDid(userModel.userid);
                this.name.Text = DDU.name;
                this.touxiang.ImageUrl = DDU.avatar;
                this.jobname.Text = DDU.jobnumber;
            }
            catch (Exception)
            {
                Response.Redirect("jsapis.aspx");
            }

        }


        /// <summary>
        /// 根据钉钉编号获取当前登录人的姓名，工号，头像
        /// </summary>
        /// <param name="DingId"></param>
        /// <returns></returns>
        public static DingUser GetNameNoImgByDid(string DingId)
        {
            string access_token = EnterpriseBusiness.GetToken(Config.ECorpId, Config.ECorpSecret).access_token;
            string url = "https://oapi.dingtalk.com/user/get?access_token=" + access_token + "&userid=" + DingId + "";
            string Userinfo = HttpHelper.Get(url);
            DingUser user = new DingUser();
            if (Userinfo.Contains("avatar") && Userinfo.Contains("name") && Userinfo.Contains("jobnumber"))
            {
                JObject a = JObject.Parse(Userinfo);
                user.avatar = a["avatar"].ToString().Trim("\"".ToCharArray());
                user.name = a["name"].ToString().Trim("\"".ToCharArray());
                user.jobnumber = a["jobnumber"].ToString().Trim("\"".ToCharArray());
            }

            return user;
        }
    }

    #region 根据dingid获取员工工号，姓名，头像的实体类
    public class DingUser
    {
        public string jobnumber { get; set; }
        public string avatar { get; set; }
        public string name { get; set; }
    }
    #endregion
}